系列文章主要是為了練習規律產出,實驗性質比較重一點,
內容會根據目前的反饋做出一點改變,歡迎感興趣的夥伴留言與交流。
RISC-V 是一個由柏克萊大學團隊主導的開源指令集,
許多不熟悉歷史背景的人可能會誤會,以為是 RISC-V。
這跟 IKEA 的發音一樣容易讓人誤解,但是這邊不只是各國發音習慣的問題。
第一代柏克萊 RISC 指令集是在 1980 年為教學目的發起的的專案,
是由 31 個指令組成的指令集。
RISC-V 則是第五代柏克萊 RISC 指令集,必須念作 RISC-Five 而不是 IRSC-V。
另外以前去聽過的幾場新竹碼農分享會有聽到一些八卦,
十分佩服一開始主導專案的學生。
RISC-V 跟其他指令集最大的不同並不是因為它開源,
而是它正在試圖解決現行指令集架構的向下相容以及擴充性問題。
單就 Intel 來說,一開始只有 80 條指令,
2015 年已經增長到 3600 條,目前官方提供的 ISA reference manual 長達4000多頁。
Intel 與 Arm 因為有許多歷史包袱,指令集非常複雜,
他們在 Instruction Decode 以及 Micro Architecture 方面也花了很多心力,
例如 2001 年發表,但目前已經被 AMD64 取代的 IA-64。
而這次要實作的 RV32I 指令集則只有 40 道指令,
相較於上面兩個大怪獸來說是練習的最佳選擇。
目前看起來 RISC-V 在商業上有一定程度的成功,
甚至讓 Arm 感到巨大的威脅,特別做了一個頁面替 RISC-V 打廣告(笑)。
也有大量的基於教學、研究、商業化等目的的開源實作,
各種語言(HDL, C/C++)以及架構(Single Cycle, Pipeline, OOM)都有。
完全實現他們所宣告的第一條目標:一個教學與商業化兼顧的指令集。
除了熟知的以 Decode 方式分類,
RISC-V 的指令集依照設計目的分為多種,
有通用處理器的 G(IMAFD) 指令集和其他擴展指令集。
例如為了注重 code size 以及效能的 embedded system 做的 Compress Extension、
更高精準度浮點數的 Q(Quad-Precision Floating-Point 指令集、
加速直譯器的 J(Dynamically Translated Languages) 指令集 、
以及目前正在制定中的 Vector 指令集。
很多實作上的考量點都寫在指令集文件中,
推薦有興趣的人可以去第一篇文章內的連結下載最新版本的文件閱讀。